# @Time    :2025/4/1 11:56
"""
题目 1：宠物管理系统
设计一个宠物管理系统，综合运用封装、继承和多态的特性。
创建Pet基类：
包含私有属性__name（宠物名字）和__age（宠物年龄）。
提供公有方法get_name和get_age用于获取宠物的名字和年龄。
提供公有方法make_sound（空实现），用于宠物发出声音的行为。
创建Dog类继承自Pet类：
重写make_sound方法，打印 “汪汪汪”。
新增公有方法fetch，打印 “狗狗去捡球了”。
创建Cat类继承自Pet类：
重写make_sound方法，打印 “喵喵喵”。
新增公有方法climb，打印 “猫咪在爬树”。
创建PetManager类：
包含私有属性__pets，用于存储所有宠物对象的列表。
提供公有方法add_pet，用于向列表中添加宠物对象。

提供公有方法make_all_sounds，遍历__pets列表，调用每个宠物的make_sound方法。
提供公有方法perform_special_action，遍历__pets列表，若宠物是Dog类实例，则调用fetch方法；若宠物是Cat类实例，则调用climb方法。
"""


class Pet:

    def __init__(self, name, age):
        self.__name = name  # -------------私有属性
        self.__age = age

    def get_name(self):
        return self.__name

    def get_age(self):
        return self.__age

    def make_sound(self):  # 用于宠物发出声音的行为
        pass


class Dog(Pet):
    def make_sound(self):  # 用于宠物发出声音的行为
        print("汪汪汪")

    def fetch(self):
        print("狗狗去捡球了")


class Cat(Pet):
    def make_sound(self):  # 用于宠物发出声音的行为
        print("喵喵喵")

    def climb(self):
        print("猫咪在爬树")


"""
包含私有属性__pets，用于存储所有宠物对象的列表。
提供公有方法add_pet，用于向列表中添加宠物对象。
"""

"""
提供公有方法make_all_sounds，遍历__pets列表，调用每个宠物的make_sound方法。
提供公有方法perform_special_action，遍历__pets列表，若宠物是Dog类实例，则调用fetch方法；若宠物是Cat类实例，则调用climb方法。
"""


class PetManager:
    def __init__(self):
        self.__pets = []

    def add_pet(self, pet):
        self.__pets.append(pet)

    def make_all_sounds(self):
        for pet in self.__pets:
            pet.make_sound()

    def perform_special_action(self):
        for pet in self.__pets:
            if isinstance(pet, Dog):
                pet.fetch()
            elif isinstance(pet, Cat):
                pet.climb()


p1 = PetManager()
cat1=Cat("小花猫",2)
dog1=Dog("大黄",10)

p1.add_pet(cat1)
p1.add_pet(dog1)

p1.perform_special_action()
p1.make_all_sounds()
